package com.itheima.reggie.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.reggie.common.R;
import com.itheima.reggie.entity.Category;
import com.itheima.reggie.service.CategoryService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/*
* 分类管理
* */
@RestController
@Slf4j
@RequestMapping("/category")
public class CategoryController {

    @Autowired
    private CategoryService categoryService;

    /**
     * 新增分类
     * @param category
     * @return
     */
    @PostMapping
    public R<String> save(@RequestBody Category category){
        log.info("[分类管理-新增]，category:{}",category);
        categoryService.save(category);
        log.info("[保存成功]，id:{}",category.getId());
        return R.success("新增分类成功");
    }

    /**
     * 分页查询
     * @param page
     * @param pageSize
     * @return
     */
    @GetMapping("/page")
    public R<Page> page(int page,int pageSize){
        //构建分页对象
        Page pageInfo = new Page(page,pageSize);
        log.info("[分类管理-分页列表]，page:{}",pageInfo.toString());
        LambdaQueryWrapper<Category> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.orderByAsc(Category::getSort);
        categoryService.page(pageInfo,queryWrapper);
        return R.success(pageInfo);
    }

    /**
     * 删除分类
     * @param id
     * @return
     */
    @DeleteMapping
    public R<String> deleteById(Long id){
        log.info("[分类管理-删除]，id:{}",id);
        //调用业务方法，完成业务
        // 准备删除数据时，先检查当前分类下，是发有菜品
        // 准备删除数据时，先检查当前分类下，是发有套餐
        // Mp提供removeById实现不了，我们需自己写业务方法，来自己实现
//        categoryService.removeById(id);
//        调用业务方法，如果发生了问题，或有任何动作，需要告诉控制器
        categoryService.deleteById(id);
        return R.success("删除成功");
    }

    /**
     * 更新分类
     * @param category
     * @return
     */
    @PutMapping
    public R<String> update(@RequestBody Category category){
        log.info("[分类管理-更新分类]，category:{}",category);
        categoryService.updateById(category);
        return R.success("更新成功");
    }


    @GetMapping("/list")
    // 参数可以是实体类
    public R<List<Category>> list(Category category){
        // 打印请求的参数，对调试很重要，狂重要
        log.info("[分类管理-获取分类列表{全部}]，category:{}",category);
        // 调用service,获取分类的列表
        LambdaQueryWrapper<Category> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        // select * from category where type = ?,显示的时候，需要排序，根据sort升序
        if (category.getType() != null){
            lambdaQueryWrapper.eq(Category::getType,category.getType());
        }
//        lambdaQueryWrapper.eq(StringUtils.isNotEmpty(category.getType()),Category::getType,category.getType());
        lambdaQueryWrapper.orderByAsc(Category::getSort);
        List<Category> list = categoryService.list(lambdaQueryWrapper);
        // 返回一个分类列表数据
        return R.success(list);
    }

}
